package data_access;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;

import modelo.Observacion;

public class ObservacionesManager
{
	public static Collection<Observacion> getByInforme(int nroInforme, Connection c)
	{
		try
		{
			PreparedStatement ps = c
					.prepareStatement("SELECT Observaciones.id, Observaciones.atributo, Observaciones.valor, Observaciones.tipo "
							+ "FROM Informes_Observaciones "
							+ "INNER JOIN Observaciones "
							+ "ON Observaciones.id = Informes_Observaciones.idObservacion "
							+ "WHERE idInforme = ?");
			ps.setInt(1, nroInforme);
			ResultSet rs = ps.executeQuery();

			Collection<Observacion> observaciones = new ArrayList<Observacion>();
			while (rs.next())
			{
				Observacion o = new Observacion();

				int idObservacion = rs.getInt(1);
				o.setId(idObservacion);

				String atributo = rs.getString(2);
				o.setAtributo(atributo);

				String valor = rs.getString(3);
				o.setValor(valor);

				String tipo = rs.getString(4);
				o.setTipo(tipo);

				observaciones.add(o);
			}
			return observaciones;
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}

		return null;
	}

	public static Collection<Observacion> getAll()
	{
		Connection c = ConnectionFactory.getConnection();
		try
		{
			PreparedStatement ps = c
					.prepareStatement("SELECT id, atributo, valor, tipo FROM Observaciones");
			ResultSet rs = ps.executeQuery();

			Collection<Observacion> observaciones = new ArrayList<Observacion>();
			while (rs.next())
			{
				Observacion o = new Observacion();

				int idObservacion = rs.getInt(1);
				o.setId(idObservacion);

				String atributo = rs.getString(2);
				o.setAtributo(atributo);

				String valor = rs.getString(3);
				o.setValor(valor);

				String tipo = rs.getString(4);
				o.setTipo(tipo);

				observaciones.add(o);
			}
			return observaciones;
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}

		return null;
	}

	public static Collection<Integer> Save(Collection<Observacion> observaciones)
	{
		Collection<Integer> co = new ArrayList<Integer>();
		for (Observacion o : observaciones)
		{
			co.add(Save(o));
		}
		return co;
	}

	private static int Save(Observacion o)
	{
		if (o.getId() != -1)
		{
			return o.getId();
		}
		else
		{
			return insertObservacion(o.getAtributo(), o.getValor(), o.getTipo());
		}
	}

	public static int insertObservacion(String atributo, String valor, String tipo)
	{
		Connection c = ConnectionFactory.getConnection();
		try
		{
			String sql = "INSERT INTO Observaciones (atributo, valor, tipo) VALUES (?, ?, ?)";
			PreparedStatement ps = c
					.prepareStatement(sql, java.sql.Statement.RETURN_GENERATED_KEYS);
			ps.setString(1, atributo);
			ps.setString(2, valor);
			ps.setString(3, tipo);
			ps.executeUpdate();

			ResultSet rs = ps.getGeneratedKeys();
			if (rs.next())
			{
				return rs.getInt(1);
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			ConnectionFactory.closeConnection(c);
		}
		return -1;
	}
}
